Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

266
Visualizações
TypeScript: definiciones secundarias "Seleccionar" de una definición seleccionada

Tengo la siguiente interfaz:

 export interface WithQueryBuilder { queryBuilderProps: { columns: { [key: string]: { enabled: boolean; label: string; key: string } }; meta: Record<string, unknown>; filters: Record<string, unknown>; search: { [key: string]: { enabled?: boolean; key: string; label: string; value: null | string }; }; page: number; sort: null; }; }

Ahora quiero crear una nueva interfaz que consista en las propiedades de queryBuilderProps y algunas adicionales. Intenté lo siguiente:

 interface TableProps extends Pick<WithQueryBuilder, 'queryBuilderProps'> { onUpdate?: () => void; }

Lo que esperaba es un tipo como ese:

 { onUpdate: ..., columns: ..., filters: ..., search: ..., [...] }

En cambio, el tipo se ve así:

 { onUpdate: ..., withQueryBuilder: { columns, meta, filters, ...), }

Entiendo por qué sucede esto, pero me pregunto si hay una manera de "seleccionar" todas las definiciones secundarias en lugar de queryBuilderProps en su conjunto. Algo así como un operador de propagación para TypeScript.

¿Existe algo así?

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Podemos usar un indexed access type para buscar una propiedad específica en otro tipo:

tipo Persona = { edad: número; nombre: cadena; vivo: booleano }; type Edad = Persona["edad"]; tipo Edad = número

Manual de TypeScript: tipos de acceso indexado

Todavía puede usar la interface para sus TableProps de la siguiente manera:

 export interface WithQueryBuilder { queryBuilderProps: { columns: { [key: string]: { enabled: boolean; label: string; key: string } }; meta: Record<string, unknown>; filters: Record<string, unknown>; search: { [key: string]: { enabled?: boolean; key: string; label: string; value: null | string }; }; page: number; sort: null; }; } // Here is the important part, this is the correct way to get the sub-type type QueryBuilderProps = WithQueryBuilder['queryBuilderProps'] // You can still use interface here interface TableProps extends QueryBuilderProps { onUpdate?: () => void; } const obj: TableProps = { onUpdate() {}, columns: { "key": { enabled: true, label: `label`, key: `key` }, }, meta: {}, filters: {}, search: {}, page: 1, sort: null, } // The following will throw error: // An interface can only extend an identifier/qualified-name with optional type arguments.(2499) interface TableProps2 extends WithQueryBuilder['queryBuilderProps'] { onUpdate?: () => void; }

Parque infantil TS

about 4 years ago · Juan Pablo Isaza Relatório

0

Puede acceder a una subpropiedad de una Interface usando corchetes [] :

 type TableProps = WithQueryBuilder["queryBuilderProps"] & { onUpdate?: () => void }

Salvadera

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda